package timing;

import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.FileNotFoundException;
import java.io.IOException;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

import com.itextpdf.text.DocumentException;

public class MyFrameStart extends JFrame {
	
	static Zadanie wybraneZadanie = null;
	
	final static JList lZadaniaLocal = new JList(ModelZadan.listModelZadan);
	
	private static final String StartString = "Play";
	private static final String PauseString = "Pauza";
	final static JButton bStop = new JButton("Stop");
	final static JButton bPauza = new JButton(PauseString);
	final static JTextField fStatus = new JTextField(40);
	final static JTextArea tResultDisplay = new JTextArea(5, 50);
	final static JButton bZakonczZacznij = new JButton("Zakończ/zacznij");
	final static JTextField fOpis = new JTextField(20);
	final static JButton bStart = new JButton("Start");
	final static Zadanie otwarteZadanie = new Zadanie();
	private static final String WszystkieString = "Wyświetl wszystkie zadania w systemie";
	private static final String DzisiejszeString = "Wyświetl tylko dzisiejsze zadania";
	final static JButton bWyswietlZadania = new JButton(WszystkieString);
	final static JButton bWyswietlMetryczke = new JButton("Wyświetl metryczkę");
	final static JButton bZapiszGenerujPDF = new JButton("Wygeneruj i otwórz raport PDF");
	
	final static JTextArea tStatusZadania = new JTextArea(5, 50);
	
	
	public MyFrameStart() {
		super("Timing App");
		setDefaultCloseOperation(MyFrameStart.EXIT_ON_CLOSE);
		setSize(600, 600);
		setLocation(50, 50);
		setLayout(new FlowLayout(FlowLayout.LEFT));
		setVisible(true);
		
		ustawOknoNaStart();
		
		bWyswietlMetryczke.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent zdarz) {
				EventQueue.invokeLater(new Runnable() {
					@Override
					public void run() {
						new MyFrameZadanie();
					}
				});
			}
		});

		bStart.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				//wyczyscDisplayMeldunku();
				otwarteZadanie.startCounter();
				aktualizujListeZadan();
				aktualizujStatus();
				ModelZadan.aktualizujListeZadan();
				aktualizujStatusZadaniaBiezacego();
				ustawPrzyciskiPoStarcie();
			}

			private void wyczyscDisplayMeldunku() {
				tStatusZadania.setText("");
				
			}

			private void ustawPrzyciskiPoStarcie() {
				bStart.setEnabled(false);
				fOpis.setEnabled(true);
				bStop.setEnabled(true);
				bPauza.setEnabled(true);
				bZakonczZacznij.setEnabled(true);
			}
		});

		fOpis.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent zdarz) {
				
				otwarteZadanie.wyswietlMeldunekONadaniuOpisu(fOpis.getText());
				//aktualizujStatusZadaniaBiezacego();
				
				Zadanie.aktualneZadanie.opis = fOpis.getText();
				
				if (!Zadanie.opisy.contains(Zadanie.aktualneZadanie.opis)) {
					Zadanie.opisy.add(Zadanie.aktualneZadanie.opis);
				}
				
	/*			
				if (!Zadanie.opisy.contains(Zadanie.aktualneZadanie.opis)) {
					Zadanie.opisy.add(Zadanie.aktualneZadanie.opis);
				}*/
				aktualizujListeZadan();
				ModelZadan.aktualizujListeZadan();
			}
		});
		
/*        fOpis.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent zdarz) {
                    Zadanie.aktualneZadanie.opis = fOpis.getText();
                    if (!Zadanie.opisy.contains(Zadanie.aktualneZadanie.opis)) {
                            Zadanie.opisy.add(Zadanie.aktualneZadanie.opis);
                    }
                    aktualizujListeZadan();
                    ModelZadan.aktualizujListeZadan();
            }
    });*/


		bZakonczZacznij.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent zdarz) {
				otwarteZadanie.stopCounter();
				wyczyscDisplayMeldunku();
				otwarteZadanie.startCounter();
				aktualizujListeZadan();
				aktualizujStatus();
				aktualizujStatusZadaniaBiezacego();
				ModelZadan.aktualizujListeZadan();
				try {
					Program.zapiszWszystkoDo();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				try {
					Program.generujPDF();
				} catch (FileNotFoundException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (DocumentException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			
			private void wyczyscDisplayMeldunku() {
				tStatusZadania.setText("");
				
			}
		});

		bStop.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				ustawPrzyciskiPoStopie();
				otwarteZadanie.stopCounter();
				wyczyscDisplayMeldunku();
				aktualizujListeZadan();
				aktualizujStatus();
				aktualizujStatusZadaniaBiezacego();
				ModelZadan.aktualizujListeZadan();
				try {
					Program.generujPDF();
				} catch (FileNotFoundException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				} catch (DocumentException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
			}
			
			private void wyczyscDisplayMeldunku() {
				tStatusZadania.setText("");
				
			}

			private void ustawPrzyciskiPoStopie() {
				bPauza.setEnabled(false);
				bStop.setEnabled(false);
				bZakonczZacznij.setEnabled(false);
				bStart.setEnabled(true);
				fOpis.setEnabled(false);
			}
		});

		bPauza.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				String cmd = e.getActionCommand();
				if (PauseString.equals(cmd)) {
					otwarteZadanie.pauzeCounter();
					aktualizujStatus();
					aktualizujStatusZadaniaBiezacego();
					ModelZadan.aktualizujListeZadan();
					ustawPrzyciskiPoPauzie();
				} else {
					otwarteZadanie.unpauzeCounter();
					ustawPrzyciskiPoUnPauzie();
					aktualizujStatus();
					aktualizujStatusZadaniaBiezacego();
					ModelZadan.aktualizujListeZadan();
				}
				aktualizujListeZadan();
			}

			private void ustawPrzyciskiPoPauzie() {
				fStatus.setText("---czas spauzowania: " + otwarteZadanie.terminSpauzowania);
				bPauza.setText(StartString);
				bStop.setEnabled(false);
				bZakonczZacznij.setEnabled(false);
			}

			private void ustawPrzyciskiPoUnPauzie() {
				bPauza.setText(PauseString);
				bStop.setEnabled(true);
				bZakonczZacznij.setEnabled(true);
			}
		});
		
		bWyswietlZadania.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				String cmd = e.getActionCommand();
				if (WszystkieString.equals(cmd)) {
					tResultDisplay.setText(Zadanie.wyswietlZadaniaGrupowanePoDacie());
					bWyswietlZadania.setText(DzisiejszeString);
					ModelZadan.aktualizujListeZadan();
				} else {
					aktualizujListeZadan();
					ModelZadan.aktualizujListeZadan();
					bWyswietlZadania.setText(WszystkieString);
				}

			}
		});
		
		bZapiszGenerujPDF.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				try {
					Program.generujPDF();
					Program.otworzPDF();
				} catch (FileNotFoundException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				} catch (DocumentException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
			}
		});
		
		
		lZadaniaLocal.addListSelectionListener(new ListSelectionListener() {
			public void valueChanged(ListSelectionEvent arg0) {
				if (!arg0.getValueIsAdjusting()) {
					wybraneZadanie = (Zadanie) lZadaniaLocal.getSelectedValue();
					if (wybraneZadanie != null) {
						bWyswietlMetryczke.setEnabled(true);
						//System.out.println("Jeżdżę po liście zadań: " +wybraneZadanie.toString());
						MyFrameZadanie.ogladaneWlasnieZadanie = wybraneZadanie;
					} else {
						bWyswietlMetryczke.setEnabled(false);
				
					}
				}
			}
		});
	}

	protected static void aktualizujStatusZadaniaBiezacego() {
		tStatusZadania.setText(otwarteZadanie.wyswietlPrzebiegZadaniaMeldunek());
	}

	protected static void aktualizujListeZadan() {
		ModelZadan.aktualizujListeZadan(); // dopisuję
		tResultDisplay.setText(Zadanie.wyswietlZadaniaDzisiejsze());
	}
	
	protected static void aktualizujStatus() {
		fStatus.setText(otwarteZadanie.statusUpdate());
	}

	private void ustawOknoNaStart() {
		
		ModelZadan.aktualizujListeZadan();
		ModelZadan.ustawParametryWyswietlaniaListyZadan(lZadaniaLocal);	
		bPauza.setEnabled(false);
		tResultDisplay.setText(Zadanie.wyswietlZadaniaDzisiejsze());
		bZakonczZacznij.setEnabled(false);
		bWyswietlMetryczke.setEnabled(false);
		fOpis.setEnabled(false);
		bStop.setEnabled(false);
		
		fStatus.setEditable(false);
		tResultDisplay.setEditable(false);
		
		add(bStart);
		add(fOpis);
		add(bStop);
		add(bZakonczZacznij);
		add(bPauza);
		add(otwarteZadanie);
		add(fStatus);
		add(tStatusZadania);
		add(lZadaniaLocal);
		add(bWyswietlMetryczke);
		add(tResultDisplay);
		add(bWyswietlZadania);



		add(bZapiszGenerujPDF);
	}
}